package site.wanjiahao.set;

import site.wanjiahao.map.Map;
import site.wanjiahao.map.TreeMap;

/**
 * 使用红黑树，构造集合，但是需要注意的是，元素必须具有可比较性
 * @param <E>
 */
public class TreeSet<E> implements Set<E>{

    // 使用TreeMap 中的key，完美作为set
    private final TreeMap<E, Object> tree = new TreeMap<>();

    @Override
    public int size() {
        return tree.size();
    }

    @Override
    public boolean isEmpty() {
        return tree.isEmpty();
    }

    @Override
    public void clear() {
        tree.clear();
    }

    @Override
    public boolean contains(E ele) {
        return tree.containsKey(ele);
    }

    @Override
    public void add(E ele) {
        // 直接添加，元素已经除去重复
        tree.put(ele, null);
    }

    @Override
    public void remove(E ele) {
        tree.remove(ele);
    }

    @Override
    public void traversal(Consumer<E> consumer) {
        tree.inorderTraversal(new Map.Consumer<E, Object>() {

            @Override
            public boolean accept(E key, Object value) {
                return consumer.visit(key);
            }
        });
    }
}
